package org.net5ijy.commons.web.util;

import java.io.File;
import java.io.IOException;
import java.util.Map;

import lombok.extern.slf4j.Slf4j;
import org.net5ijy.commons.http.Http;
import org.net5ijy.commons.http.HttpClientHttp;
import org.net5ijy.commons.http.response.FileResponseHolder;
import org.net5ijy.commons.http.response.HtmlResponseHolder;

/**
 * HTTP请求处理工具类
 *
 * @author 创建人：xuguofeng
 * @version 创建于：2018年9月11日 下午1:22:41
 * @deprecated 使用 {@link org.net5ijy.commons.http.Http} {@link org.net5ijy.commons.http.HttpClientHttp}
 * 替代
 */
@Slf4j
@Deprecated
public class HttpClientUtil {

  private static Http http = new HttpClientHttp();

  /**
   * 处理没有请求参数的GET请求
   *
   * @param url 请求地址，后面可以有?arg1=val1&arg2=val2这样的参数
   * @return 响应字符串
   * @author xuguofeng
   */
  @Deprecated
  public static String doGet(String url) {
    return doGet(url, null);
  }

  /**
   * 处理含有请求参数的GET请求
   *
   * @param url 请求地址，后面可以有?arg1=val1&arg2=val2这样的参数
   * @param params 封装请求参数
   * @return 响应字符串
   * @author xuguofeng
   */
  @Deprecated
  public static String doGet(String url, Map<String, String> params) {
    return http.doGet(url, params);
  }

  /**
   * 使用POST方式发送JSON数据
   *
   * @param url 请求地址
   * @param json json字符串
   * @return 响应字符串
   * @author xuguofeng
   */
  @Deprecated
  public static String doPostJson(String url, String json) {
    return http.doPostJson(url, json);
  }

  /**
   * 使用POST方式发送JSON数据
   *
   * @param url 请求地址
   * @param jsonAble 可以转为JSON字符串的Object对象
   * @return 响应字符串
   * @author xuguofeng
   */
  @Deprecated
  public static String doPostJson(String url, Object jsonAble) {
    return http.doPostJson(url, jsonAble);
  }

  /**
   * 使用POST方式发送XML数据
   *
   * @param url 请求地址
   * @param xml 封装xml数据
   * @return 响应字符串
   * @author xuguofeng
   */
  @Deprecated
  public static String doPostXml(String url, Map<String, String> xml) {
    return doPostXml(url, XmlUtil.map2Xml(xml, "xml"));
  }

  /**
   * 使用POST方式发送XML数据
   *
   * @param url 请求地址
   * @param xml xml字符串
   * @return 响应字符串
   * @author xuguofeng
   */
  @Deprecated
  public static String doPostXml(String url, String xml) {
    return http.doPostXml(url, xml);
  }

  /**
   * 发送一个POST请求到指定url
   *
   * @param url 请求地址，后面可以有?arg1=val1&arg2=val2这样的参数
   * @return 响应字符串
   * @author xuguofeng
   */
  @Deprecated
  public static String doPost(String url) {
    return doPostForm(url, null);
  }

  /**
   * 发送一个POST请求到指定url
   *
   * @param url 请求地址
   * @param params 封装请求参数
   * @return 响应字符串
   * @author xuguofeng
   */
  @Deprecated
  public static String doPostForm(String url, Map<String, String> params) {
    return http.doPostForm(url, params);
  }

  /**
   * 发送一个POST请求到指定url
   *
   * @param url 请求地址
   * @param params 普通类型参数
   * @param file 文件
   * @param name 文件域的name值
   * @author xuguofeng
   */
  @Deprecated
  public static String doPostFormWithFile(
      String url, Map<String, String> params, File file, String name) {
    return http.doPostFormWithFile(url, params, file, name);
  }

  /**
   * 上传文件到指定url
   *
   * @param url 请求地址
   * @param path 文件路径
   * @param name 文件在form中的name值
   * @author xuguofeng
   */
  @Deprecated
  public static String upload(String url, String path, String name) {
    return upload(url, new File(path), name);
  }

  /**
   * 上传文件到指定url
   *
   * @param url 请求地址
   * @param file 文件对象
   * @param name 文件在form中的name值
   * @author xuguofeng
   */
  @Deprecated
  public static String upload(String url, File file, String name) {
    return http.upload(url, file, name);
  }

  /**
   * 使用get方式下载文件
   *
   * @param url 请求地址
   * @param filePath 文件保存路径
   * @param headers 请求头
   * @param params 请求参数
   * @author xuguofeng
   * @deprecated 使用 {@link HttpClientUtil#download(String, String, Map, Map)} 方法替换
   */
  @Deprecated
  public static FileResponseHolder getFile(
      String url, String filePath, Map<String, String> headers, Map<String, String> params) {
    return download(url, filePath, headers, params);
  }

  /**
   * 使用get方式下载文件
   *
   * @param url 请求地址
   * @param filePath 文件保存路径
   * @param headers 请求头
   * @param params 请求参数
   * @author xuguofeng
   */
  @Deprecated
  public static FileResponseHolder download(
      String url, String filePath, Map<String, String> headers, Map<String, String> params) {
    return http.download(url, filePath, headers, params);
  }

  /**
   * 使用get方式获取网页
   *
   * @param url 请求地址
   * @param headers 请求头
   * @param params 请求参数
   * @author xuguofeng
   * @deprecated 使用 {@link HttpClientUtil#html(String, Map, Map)} 方法替换
   */
  @Deprecated
  public static HtmlResponseHolder getHtml(
      String url, Map<String, String> headers, Map<String, String> params) {
    return html(url, headers, params);
  }

  /**
   * 使用get方式获取网页
   *
   * @param url 请求地址
   * @param headers 请求头
   * @param params 请求参数
   * @author xuguofeng
   */
  @Deprecated
  public static HtmlResponseHolder html(
      String url, Map<String, String> headers, Map<String, String> params) {
    return http.html(url, headers, params);
  }

  /**
   * 使用post方式获取网页，可以用于提交表单
   *
   * @param url 请求地址
   * @param headers 请求头
   * @param params 请求参数
   * @author xuguofeng
   */
  @Deprecated
  public static HtmlResponseHolder postHtml(
      String url, Map<String, String> headers, Map<String, String> params) {
    return http.postHtml(url, headers, params);
  }

  /**
   * 关闭客户端
   *
   * @author xuguofeng
   * @date 2020/7/14 13:51
   */
  public static void closeHttpClient() {
    try {
      http.close();
    } catch (IOException e) {
      log.error(e.getMessage(), e);
    }
  }
}
